package main

import (
	"fmt"
	"strconv"
)
/*
	猜数字游戏
你写下一个数字让你的朋友猜。每次他猜测后，你给他一个提示，
告诉他有多少位数字和确切位置都猜对了（称为“Bulls”, 公牛），
有多少位数字猜对了但是位置不对（称为“Cows”, 奶牛）。
你的朋友将会根据提示继续猜，直到猜出秘密数字。

示例 1:
输入: secret = "1807", guess = "7810"
输出: "1A3B"
解释: 1 公牛和 3 奶牛。公牛是 8，奶牛是 0, 1 和 7。

示例 2:
输入: secret = "1123", guess = "0111"
输出: "1A1B"
解释: 朋友猜测数中的第一个 1 是公牛，第二个或第三个 1 可被视为奶牛。


 */

func getHint(secret string, guess string) string {
	min := func(x, y int) int {
		if x > y {
			return y
		}
		return  x
	}
	A, B := 0, 0
	aMap := make([]int, 10)    // 因为数字只会是0 - 9 所以使用数组代替map
	bMap := make([]int, 10)
	for i := range secret {
		if secret[i] == guess[i] {  // 索引和数字都相同
			A ++
		}else {   // 统计不同数字的个数
			aMap[secret[i] - '0'] ++
			bMap[guess[i] - '0'] ++
		}
	}
	for i := range aMap {
		B += min(aMap[i], bMap[i])
	}

	return strconv.Itoa(A) + "A" + strconv.Itoa(B) + "B"
}

func main() {
	fmt.Println(getHint("1123", "0111"))
}